package 字符串练习;
/*字符串原理小结
        扩展底层原理3： 字符串拼接的底层原理
        ． 如果没有变量参与，都是字符串直接相加，编译之后就是拼接之后的结果，会复用串池中的字符串。
        ． 如果有变量参与，每一行拼接的代码，都会在内存中创建新的字符串，浪费内存。
        扩展底层原理4： StringBuilder提高效率原理图
        ． 所有要拼接的内容都会往StringBuilder中放，不会创建很多无用的空间，节约内存
        */

//StringBuilder:是字符串容器类型，可以存储任何类型的字符串，注意：这只是容器，不是字符串，是工具
//常用与字符串的反转
public class StringBuilder1 {
    public static void main(String[] args) {
        //创建对象
        StringBuilder sb = new StringBuilder();//创建一个字符串容器，名为sb，此时，该字符串为空
        //第一 添加数据：append
        //append:可以往StringBuilder类型的的容器添加数据，在字符串后添加
        sb.append("1");//往sb容器中添加一个数据
        System.out.println(sb);
        sb.append("2");
        System.out.println(sb);
        sb.append("ABC");
        System.out.println(sb);
        sb.append("你好");
        System.out.println(sb);//12ABC你好

        //第二 逆序输出：reverse  :   将该StringBuilder类型的字符串逆序输出
        StringBuilder reverse1 = sb.reverse();
        System.out.println(reverse1);//好你CBA21

        //第三：length   :    获取该容器的使用字符串相加长度
        int length = sb.length();
        System.out.println(length);

        //第四；toString   :   将StringBuilder类型的容器变成String类型，即将容器变成字符串
        //需要将StringBuilder容器转换成String类型，否则无法使用String的自带的方法
        String sb1 = sb.toString();
        System.out.println(sb1);//好你CBA21
        //例如
        String substring1 = sb1.substring(0,2);//截取字符
        System.out.println(substring1);//好你
        String replace1 = sb1.replace("好", "ni");//替换字符
        System.out.println(replace1);//ni你CBA21,原句为"好你CBA21"
        char c = sb1.charAt(0);//根据索引，查找字符
        System.out.println(c);//输出B
    }
}
